package com.atwisdom.star.service.util;

import java.math.BigDecimal;

/**
 * @ClassName: Arith
 * @ Description:
 * @author:王红艳
 * @date:
 */
public class ArithUtil {
    /*public  static double add(double v1,double v2){
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        BigDecimal b2 = new BigDecimal(Double.toString(v2));
        return b1.add(b2).doubleValue();

    }

    // 进行减法运算
    public static double sub(double v1,double v2){
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        BigDecimal b2 = new BigDecimal(Double.toString(v2));
        return b1.subtract(b2).doubleValue();

    }

    // 进行加法运算
    public static double mul(double d1, double d2){        // 进行乘法运算
        BigDecimal b1 = new BigDecimal(d1);
        BigDecimal b2 = new BigDecimal(d2);
        return b1.multiply(b2).doubleValue();

    }

    // 进行除法运算
    public static  double div(double d1,double d2,int len) {// 进行除法运算
        BigDecimal b1 = new BigDecimal(d1);
        BigDecimal b2 = new BigDecimal(d2);
        return b1.divide(b2,len,BigDecimal.ROUND_HALF_UP).doubleValue();

    }

    // 进行四舍五入操作
    public static  double round(double d,int len) {     // 进行四舍五入操作
        BigDecimal b1 = new BigDecimal(d);
        BigDecimal b2 = new BigDecimal(1);
        // 任何一个数字除以1都是原数字
        // ROUND_HALF_UP是BigDecimal的一个常量，表示进行四舍五入的操作
        return b1.divide(b2, len,BigDecimal.ROUND_HALF_UP).doubleValue();
    }*/

    /**
     * double求和返回BigDecimal
     * 保留两位小数
     * @param v1
     * @param v2
     * @return
     */
    public  static BigDecimal doubleAddToBigDecimal(double v1,double v2){
        BigDecimal b1 = bigDecimalRoundToBigDecimal(new BigDecimal(Double.toString(v1)),2);
        BigDecimal b2 = bigDecimalRoundToBigDecimal(new BigDecimal(Double.toString(v2)),2);
        BigDecimal sum = b1.add(b2);
        return bigDecimalRoundToBigDecimal(sum,2);

    }

    /**
     * BigDecimal求和返回BigDecimal
     * 保留两位小数
     * @param b1
     * @param b2
     * @return
     */
    public  static BigDecimal bigDecimalAddToBigDecimal(BigDecimal b1, BigDecimal b2){
        b1 = bigDecimalRoundToBigDecimal(b1,2);
        b2 = bigDecimalRoundToBigDecimal(b2,2);
        BigDecimal sum = b1.add(b2);
        return bigDecimalRoundToBigDecimal(sum,2);
    }

    /**
     * double相减返回BigDecimal，保留两位小数
     * @param v1
     * @param v2
     * @return
     */
    // 进行减法运算
    public static BigDecimal doubleSubToBigDecimal(double v1,double v2){
        BigDecimal b1 = bigDecimalRoundToBigDecimal(new BigDecimal(Double.toString(v1)),2);
        BigDecimal b2 = bigDecimalRoundToBigDecimal(new BigDecimal(Double.toString(v2)),2);
        BigDecimal sub = b1.subtract(b2);
        return bigDecimalRoundToBigDecimal(sub,2);

    }

    /**
     * BigDecimal相减返回BigDecimal，保留两位小数
     * @param b1
     * @param b2
     * @return
     */
    // 进行减法运算
    public static BigDecimal bigDecimalSubToBigDecimal(BigDecimal b1,BigDecimal b2){
        BigDecimal sub = b1.subtract(b2);
        return bigDecimalRoundToBigDecimal(sub,2);

    }

    /**
     * double相乘返回BigDecimal，保留两位小数
     * @param d1
     * @param d2
     * @return
     */
    public static BigDecimal doubleMulToBigDecimal(double d1, double d2){        // 进行乘法运算
        BigDecimal b1 = bigDecimalRoundToBigDecimal(new BigDecimal(Double.toString(d1)),2);
        BigDecimal b2 = bigDecimalRoundToBigDecimal(new BigDecimal(Double.toString(d2)),2);
        BigDecimal mul = b1.multiply(b2);
        return bigDecimalRoundToBigDecimal(mul,2);

    }

    /**
     * BigDecimal相乘返回BigDecimal保留两位小鼠
     * @param b1
     * @param b2
     * @return
     */
    public static BigDecimal bigDecimalMulToBigDecimal(BigDecimal b1, BigDecimal b2){        // 进行乘法运算
        b1 = bigDecimalRoundToBigDecimal(b1,2);
        b2 = bigDecimalRoundToBigDecimal(b2,2);
        BigDecimal mul = b1.multiply(b2);
        return bigDecimalRoundToBigDecimal(mul,2);

    }

    /**
     *
     * @param d1
     * @param d2
     * @param len
     * @return
     */
    // 进行除法运算
    public static  BigDecimal doubleDivToBigDecimal(double d1,double d2,int len) {// 进行除法运算
        BigDecimal b1 = bigDecimalRoundToBigDecimal(new BigDecimal(Double.toString(d1)),2);
        BigDecimal b2 = bigDecimalRoundToBigDecimal(new BigDecimal(Double.toString(d2)),2);
        if(b2.equals(BigDecimal.ZERO)){
            return BigDecimal.ZERO;
        }
        return b1.divide(b2,len,BigDecimal.ROUND_HALF_UP);

    }

    /**
     * BigDecimal相除返回BigDecimal
     * @param b1 被除数
     * @param b2 除数
     * @param len 保留小数位数
     * @return
     */
    public static  BigDecimal bigDecimalDivToBigDecimal(BigDecimal b1, BigDecimal b2,int len) {// 进行除法运算
        if(b2.compareTo(BigDecimal.ZERO)==0){
            return BigDecimal.ZERO;
        }
        b1 = bigDecimalRoundToBigDecimal(b1,2);
        b2 = bigDecimalRoundToBigDecimal(b2,2);
        return b1.divide(b2,len,BigDecimal.ROUND_HALF_UP);

    }

    /**
     * double四舍五入返回BigDecimal
     * @param d
     * @param len 保留小数位数
     * @return
     */
    // 进行四舍五入操作
    public static  BigDecimal doubleRoundToBigDecimal(double d,int len) {     // 进行四舍五入操作
        BigDecimal b1 = new BigDecimal(d);
        BigDecimal b2 = new BigDecimal(1);
        // 任何一个数字除以1都是原数字
        // ROUND_HALF_UP是BigDecimal的一个常量，表示进行四舍五入的操作
        return b1.divide(b2, len,BigDecimal.ROUND_HALF_UP);
    }

    /**
     * BigDecimal四舍五入返回BigDecimal
     * @param b1
     * @param len 保留小数位数
     * @return
     */
    public static  BigDecimal bigDecimalRoundToBigDecimal(BigDecimal b1,int len) {     // 进行四舍五入操作
        BigDecimal b2 = new BigDecimal(1);
        // 任何一个数字除以1都是原数字
        // ROUND_HALF_UP是BigDecimal的一个常量，表示进行四舍五入的操作
        return b1.divide(b2, len,BigDecimal.ROUND_HALF_UP);
    }

    /**
     * double转换为BigDecimal
     * @param d
     * @return
     */
    public static BigDecimal doubleRoundToBigDecimal(double d){
        BigDecimal b1 = new BigDecimal(d);
        return b1;
    }

}
